package com.ymx.darling.spring.mapper;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
/**
 * 配置 Darling 持久层扫描器的工具类
 * 实现了 BeanDefinitionRegistryPostProcessor 接口，以便在 Spring 容器初始化时执行自定义逻辑
 *
 * @author 爱Java的小于
 */
public class MapperScannerConfigurer implements BeanDefinitionRegistryPostProcessor {
    // 存储 Mapper 接口所在的包路径
    private static String mapperPackage;

    /**
     * 设置 Mapper 接口所在的包路径
     * @param mapperPackage Mapper 接口的包路径
     */
    public void setMapperPackage(String mapperPackage) {
        MapperScannerConfigurer.mapperPackage = mapperPackage;
    }

    /**
     * 获取 Mapper 接口所在的包路径
     * @return Mapper 接口的包路径
     */
    public static String getMapperPackage() {
        return mapperPackage;
    }

    /**
     * 在 Spring 容器初始化时，扫描指定包路径下的 Mapper 接口，并注册到 Spring 容器中
     * @param beanDefinitionRegistry Bean 定义注册表
     * @throws BeansException 如果处理过程中遇到错误
     */
    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
        // 创建 MapperScanner 实例
        MapperScanner mapperScanner = new MapperScanner(beanDefinitionRegistry);
        // 执行 Mapper 接口的扫描和注册
        mapperScanner.doScan(mapperPackage);
    }

    /**
     * 在 Spring 容器初始化时，对 Bean 工厂进行处理
     * 此方法在此类中未使用，留空
     * @param configurableListableBeanFactory 可配置的 Bean 工厂
     * @throws BeansException 如果处理过程中遇到错误
     */
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
        // 此方法在此类中未使用，留空
    }
}
